package com.anxin.act.busFlow.dao;

import com.anxin.act.busFlow.entity.WfBusNode;
import com.anxin.act.busFlow.entity.WfConfigNode;

import java.util.List;

import com.anxin.framework.web.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;

/**
 * 业务流程节点Dao接口
 *
 * @author jbs
 * @date 2020-04-08
 */
public interface WfConfigNodeDao extends BaseDao<WfConfigNode> {
    /**
     * 查询业务流程节点
     *
     * @param id 业务流程节点ID
     * @return 业务流程节点
     */
    public WfConfigNode getById(String id);

    /**
     * 查询业务流程节点列表
     *
     * @param wfConfigNode 业务流程节点
     * @return 业务流程节点集合
     */
    public List<WfConfigNode> findList(WfConfigNode wfConfigNode);

    /**
     * 查询需要提醒的节点
     * @return
     */
    public List<WfConfigNode> findReminderNode();

    /**
     * 新增业务流程节点
     *
     * @param wfConfigNode 业务流程节点
     * @return 结果
     */
    public int insert(WfConfigNode wfConfigNode);

    /**
     * 修改业务流程节点
     *
     * @param wfConfigNode 业务流程节点
     * @return 结果
     */
    public int update(WfConfigNode wfConfigNode);

    /**
     * 更新业务节点对应流程
     * @param wfBusNode 业务节点
     * @return 结果
     */
    public int updateProcessKey(WfBusNode wfBusNode);

    /**
     * 更新业务节点 表单类型 表单id
     * @param wfBusNode 业务节点
     * @return 结果
     */
    public int updateFormType(WfBusNode wfBusNode);

    /**
     * 删除业务流程节点
     *
     * @param id     业务流程节点ID
     * @param userId 操作人ID
     * @return 结果
     */
    public int deleteById(@Param("id") String id, @Param("userId") String userId);

    /**
     * 查询所有审批通过后进入投后的节点
     * @param flowId 业务流程配置ID
     * @return 流程节点的ID集合
     */
    public List<String> findListByAfter(@Param("flowId") String flowId);

    /**
     * 根据节点ID列表查询节点信息
     * @param nodeIds
     * @return
     */
    List<WfConfigNode> findListByNodeIds(@Param("nodeIds") List<String> nodeIds);

    int saveBatchNodes(@Param("nodeList") List<WfConfigNode> nodeList);
}
